Exemple #1
0
CFStringRef WBProcessCopyNameForPID(pid_t pid) {
  /* if current process */
  if (pid == getpid()) {
    spx_assert(getprogname(), "progname required");
    return CFStringCreateWithCString(kCFAllocatorDefault, getprogname(), kCFStringEncodingUTF8);
  }
  /* try to use carbon process manager */
  ProcessSerialNumber psn;
  if (noErr == GetProcessForPID(pid, &psn)) {
    CFStringRef name = NULL;
    if (noErr == CopyProcessName(&psn, &name))
      return name;
  }

  CFStringRef name = NULL;
  /* fall back: use sysctl */
  size_t len = 0;
  char stackbuf[2048];
  char *buffer = stackbuf;
  int mig[] = { CTL_KERN, KERN_PROCARGS, pid };
  int err = sysctl(mig, 3, NULL, &len, NULL, 0);
  if (0 == err && len > 0) {
    if (len > 2048)
      buffer = malloc(len);
    buffer[0] = '\0';
    err = sysctl(mig, 3, buffer, &len, NULL, 0);
    if (0 == err && strlen(buffer) > 0) {
      name = CFStringCreateWithCString(kCFAllocatorDefault, basename(buffer), kCFStringEncodingUTF8);
    }
    if (buffer != stackbuf)
      free(buffer);
  }
  return name;
}
bool
testProcessName(const char* name, const ProcessSerialNumber& psn)
{
	CFStringRef	processName;
	OSStatus	err = CopyProcessName(&psn, &processName);
	return (err == 0 && CFEqual(CFSTR("ScreenSaverEngine"), processName));
}
CFStringRef copyCurrentProcessName(void) {
	ProcessSerialNumber PSN = { 0, kCurrentProcess };
	CFStringRef name = NULL;
	OSStatus err = CopyProcessName(&PSN, &name);
	if (err != noErr) {
		NSLog(CFSTR("in copyCurrentProcessName in CFGrowlAdditions: Could not get process name because CopyProcessName returned %li"), (long)err);
		name = NULL;
	}
	return name;
}
void
COSXScreenSaver::processLaunched(ProcessSerialNumber psn)
{
	CFStringRef	processName;
	OSStatus	err = CopyProcessName(&psn, &processName);
	
	if (err == 0 && CFEqual(CFSTR("ScreenSaverEngine"), processName)) {
		m_screenSaverPSN = psn;
		LOG((CLOG_DEBUG1 "ScreenSaverEngine launched. Enabled=%d", m_enabled));
		if (m_enabled) {
			EVENTQUEUE->addEvent(
				CEvent(IPrimaryScreen::getScreensaverActivatedEvent(),
					m_eventTarget));
		}
	}
}
Exemple #5
0
bool application_is_open(CFStringRef appName, ProcessSerialNumber *psn)
{
	OSStatus status;
    ProcessSerialNumber currentProcessPSN = {kNoProcess, kNoProcess};

	status = GetNextProcess(&currentProcessPSN);
	while (status == noErr) {
		CFStringRef processName = NULL;
		
		status = CopyProcessName(&currentProcessPSN, &processName);
		if (status != noErr)
			die("CopyProcessName failed");
		if (NULL == processName)
			die("CopyProcessName succeeded, but the process name is NULL!");
			
		if (kCFCompareEqualTo == CFStringCompare(processName, appName, 0))
		{
			memcpy(psn, &currentProcessPSN, sizeof(*psn));
			return TRUE;
		}
		status = GetNextProcess(&currentProcessPSN);
	}
	return FALSE;
}
Exemple #6
0
void list_open_applications()
{
	OSStatus status;
    ProcessSerialNumber currentProcessPSN = {kNoProcess, kNoProcess};

	status = GetNextProcess(&currentProcessPSN);
	while (status == noErr) {
		CFStringRef processName = NULL;
		char name[32];
		
		status = CopyProcessName(&currentProcessPSN, &processName);
		if (status != noErr)
			die("CopyProcessName failed");
		if (NULL == processName)
			die("CopyProcessName succeeded, but the process name is NULL!");
			
		CFStringGetCString(processName, &name[0], 32, kCFStringEncodingUTF8);
		printf("{ 0x%x, 0x%08x }  %s\n",
			currentProcessPSN.highLongOfPSN, currentProcessPSN.lowLongOfPSN,
			&name);
		
		status = GetNextProcess(&currentProcessPSN);
	}
}