C++Builder  |  Delphi  |  Kylix  |  Turbo-C  |  .NET  |  JBuilder  |  Together  |  FireBird
C++Builder Programming Forum º¼·£µåÆ÷·³ BorlandForum
 °æ°í! °Ô½Ã¹° ÀÛ¼ºÀÚÀÇ »çÀü Çã¶ô¾ø´Â ¸ÞÀÏÁÖ¼Ò ÃßÃâÇàÀ§ Àý´ë ±ÝÁö
C++ºô´õ Æ÷·³
Q & A
FAQ
ÆÁ&Æ®¸¯
°­ÁÂ/¹®¼­
ÀÚ·á½Ç
ÄÄÆ÷³ÍÆ®/¶óÀ̺귯¸®
¸Þ½ÅÀú ÇÁ·ÎÁ§Æ®
º¼·£µåÆ÷·³ Ȩ
Çìµå¶óÀÎ ´º½º
IT ´º½º
°øÁö»çÇ×
ÀÚÀ¯°Ô½ÃÆÇ
ÇØÇÇ ºê·¹ÀÌÅ©
°øµ¿ ÇÁ·ÎÁ§Æ®
±¸ÀÎ/±¸Á÷
ȸ¿ø ÀåÅÍ
°ÇÀÇ»çÇ×
¿î¿µÁø °Ô½ÃÆÇ
ȸ¿ø ¸Þ´º
ºÏ¸¶Å©
º¼·£µåÆ÷·³ ±¤°í ¸ðÁý

C++ºô´õ ÆÁ&Æ®¸¯
C++Builder Programming Tip&Tricks
[895] ÇÁ·Î¼¼½º ¾ÆÀ̵ð·Î À©µµ¿ì ÇÚµé ¾ò±â, ÇÁ·Î±×·¥ ½ÇÇà½Ã۰í À©µµ¿ì ÇÚµé ¾ò±â
¾ÆÁ¦³ª [azena] 1987 ÀÐÀ½    2009-06-13 06:54
ÇÁ·Î±×·¥¿¡¼­ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۰í SendMessage µîÀ¸·Î ¸Þ½ÃÁö¸¦ º¸³»°í ½ÍÀº °æ¿ì°¡ Àִµ¥¿ä.

SendMessage¿¡´Â À©µµ¿ì ÇÚµéÀ» ³Ö¾î¾ß Çϱ⠶§¹®¿¡, ½ÇÇà½ÃŲ ÇÁ·Î±×·¥ÀÇ À©µµ¿ì ÇÚµéÀ» ¾ò¾î¾ß ÇÏÁÒ.

FindWindow·Î ãÀ¸¸é °£´ÜÇÏÁö¸¸, °°Àº ÇÁ·Î±×·¥ÀÌ ¿©·¯°³ ½ÇÇàµÉ °¡´É¼ºÀÌ ÀÖ´Â °æ¿ì¿¡´Â ¾µ ¼ö ¾øÁÒ.

±¸±Û¸µÀ» ÅëÇØ¼­ À©µµ¿ì ÇÚµéÀ» ãÀ» ¼ö ÀÖ´Â Äڵ带 ¸¸µé¾ú½À´Ï´Ù.


// idea from http://support.microsoft.com/kb/242308/en-us

ULONG ProcIDFromWnd(HWND hwnd) // À©µµ¿ì ÇÚµé·Î ÇÁ·Î¼¼½º ¾ÆÀ̵ð ¾ò±â
{
  ULONG idProc;
  GetWindowThreadProcessId( hwnd, &idProc );
  return idProc;
}

HWND GetWinHandle(ULONG pid) // ÇÁ·Î¼¼½º ¾ÆÀ̵ð·Î À©µµ¿ì ÇÚµé ¾ò±â
{
  HWND tempHwnd = FindWindow(NULL,NULL); // ÃÖ»óÀ§ À©µµ¿ì ÇÚµé ã±â

  while( tempHwnd != NULL )
  {
    if( GetParent(tempHwnd) == NULL ) // ÃÖ»óÀ§ ÇÚµéÀÎÁö üũ, ¹öư µîµµ ÇÚµéÀ» °¡Áú ¼ö ÀÖÀ¸¹Ç·Î ¹«½ÃÇϱâ À§ÇØ
      if( pid == ProcIDFromWnd(tempHwnd) )
        return tempHwnd;
    tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT); // ´ÙÀ½ À©µµ¿ì ÇÚµé ã±â
  }
  return NULL;
}



»ç¿ë ¹æ¹ýÀº ¾Æ·¡¿Í °°½À´Ï´Ù.


  bool result;
  STARTUPINFO si;
  ZeroMemory(&si,sizeof(si));
  si.cb = sizeof(si);
  PROCESS_INFORMATION pi;

  result = CreateProcess("SpxCaster.exe",NULL,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); // ÇÁ·Î¼¼½º ¸¸µé±â

  if( result )
  {
    HWND hwnd;
    DWORD startTime = timeGetTime();

    while(true) // CreateProcess ÇÏ¸é ¹Ù·Î À©µµ¿ì°¡ ¿­¸®´Â°Ô ¾Æ´Ï¹Ç·Î ´ë±âÇϱâ À§ÇØ
    {
      if( timeGetTime() - startTime > 5000 ) // ¹«ÇÑ ´ë±â ¹æÁö¿ë. 5ÃÊ ÃʰúµÇ¸é ·çÇÁ ³ª°¡¾ß ÇϹǷΠÆÇ´Ü
        break;
      else
        Sleep(100); 

      hwnd = GetWinHandle(pi.dwProcessId); // ÇÁ·Î¼¼½º ¾ÆÀ̵ð·Î À©µµ¿ì ÇÚµé ¾ò±â
      
      if( hwnd != NULL )
      {
        // ÇÁ·Î¼¼½º ¾ÆÀ̵ð¿Í ÇÚµéÀ» ÀÌ¿ë
        m_CasterHandle = pi.hProcess; 
        m_CasterHWND = hwnd;
        break;
      }
    }

    if( hwnd == NULL )
      MsgError("ÇÚµé ¹ß°ß ½ÇÆÐ");
  }
  else
    MsgError("ÇÁ·Î¼¼½º »ý¼º ½ÇÆÐ");

À强ȣ [nasilso]   2009-06-15 11:09 X
ÁÁ³×¿ä..
Àúµµ °¡²û ÀÌ ±â´ÉÀÌ ÇÊ¿äÇØ¼­ ¸¸µé¾î ¾²´Âµ¥..
Ä¿¹Â´ÏƼ¿¡ ÀÌ·± Áú¹®ÀÌ Á¾Á¾ ¿Ã¶ó¿À´õ±º¿ä..

±×·±µ¥..
"CreateProcess ÇÏ¸é ¹Ù·Î À©µµ¿ì°¡ ¿­¸®´Â°Ô ¾Æ´Ï¹Ç·Î ´ë±âÇϱâ À§Çؼ­´Â..."

´ë°Ô WaitForInputIdle À̶ó´Â API¸¦ ¾¹´Ï´Ù.
CreateProcessÈÄ WaitForInputIdle ·Î ´ë±âÇß´Ù°¡
FindWindowÇϸé while¹®À¸·Î ãÀ»¶§±îÁö ¹Ýº¹ÇÏÁö ¾Ê¾Æµµ ã¾ÆÁý´Ï´Ù.
Ȥ ¾Ð´Ï±î? ù¹øÂ°Window¸¦ »ý¼ºÇÒ¶§±îÁö 5ÃÊ ÀÌ»ó °É¸®Áö...
¾ÆÁ¦³ª [azena]   2009-06-16 11:18 X
¿ÀÈ£¶ó ÁÁÀº API°¡ ÀÖ¾ú±º¿ä.
ÈξÀ Æí¸®ÇÏ°Ô ¾µ ¼ö Àֳ׿ä.
Á¤º¸ °¨»çÇÕ´Ï´Ù~
¾ÆÁ¦³ª [azena]   2009-06-16 11:23 X
The WaitForInputIdle function waits until the specified process is waiting for user input with no input pending, or until the time-out interval has elapsed.

DWORD WaitForInputIdle(
  HANDLE hProcess, // ÇÁ·Î¼¼½º ÇÚµé
  DWORD dwMilliseconds  // ´ë±â ½Ã°£ (ms)
);

+ -
ÀÌÀü±Û:  [Forms] sub-formÀ» ÀÛ¾÷Ç¥½ÃÁÙ¿¡ ³ªÅ¸³¯¶§ ¹®Á¦Á¡µé..
´ÙÀ½±Û:  ListView ¼±Åùٰ¡ »ç¶óÁú ¶§ ¤Ð¤Ð AdvancedCustomDrawItem

°ü·Ã ±Û ¸®½ºÆ®
895 ÇÁ·Î¼¼½º ¾ÆÀ̵ð·Î À©µµ¿ì ÇÚµé ¾ò±â, ÇÁ·Î±×·¥ ½ÇÇà½Ã۰í À©µµ¿ì ÇÚµé ¾ò±â ¾ÆÁ¦³ª 1987 2009-06-13
Google
Copyright © 2008, borlandforum.com. All right reserved.