OSDN Git Service

WindowsNT固定
[dokopop/dokopop.git] / DCHookTest / DCHookMain.cpp
index 0cd552b..0aba205 100644 (file)
@@ -36,7 +36,7 @@
 
 #define        DPI_DETECT                      0               // DPI Detect in main (monitor\82²\82Æ\82Ì\90Ý\92è\82ª\82Å\82«\82È\82¢\82½\82ßdebug\97p)
 
-#define        DEF_USE64                       (false)
+#define        DEF_USE64                       (fWow64)
 
 /*------------------------------------------*/
 /*             Definitions                                                     */
@@ -74,6 +74,7 @@ __fastcall TDCHookMainForm::TDCHookMainForm(TComponent* Owner)
        hDll = NULL;
        EnablePopup = true;
 
+#if 0
        WindowsNT = false;
 
        OSVERSIONINFO VersionInfo;
@@ -84,6 +85,7 @@ __fastcall TDCHookMainForm::TDCHookMainForm(TComponent* Owner)
                        WindowsNT = true;
                        break;
        }
+#endif
        CheckWOW64();
        BootUp = true;
        Capturing = false;
@@ -184,9 +186,6 @@ void __fastcall TDCHookMainForm::FormCreate(TObject *Sender)
        }
 
 //     Application->OnIdle = IdleHandler;
-
-       if (fWow64)
-               tmReInit64->Enabled = true;
 }
 //---------------------------------------------------------------------------
 void __fastcall TDCHookMainForm::FormCloseQuery(TObject *Sender,
@@ -345,6 +344,7 @@ void __fastcall TDCHookMainForm::miOptionClick(TObject *Sender)
                Ini->WriteInteger(PFS_CONFIG, PFS_USE64, PopupConfigDlg->cbUse64->Checked);
                SaveConfig();
                SetupConfig();
+               tmReInit->Enabled = false;
                if (!useAMODI && (CaptureMode & CM_IMAGE) && !AMODIAvail){
                        // AMODI off->ON \82©\82 AMODI\82ª\82¢\82È\82¢\8fê\8d\87
                        NotifyAMODI();
@@ -582,11 +582,17 @@ void __fastcall TDCHookMainForm::tmMODINotifyTimer(TObject *Sender)
        }
 }
 //---------------------------------------------------------------------------
-void __fastcall TDCHookMainForm::tmReInit64Timer(TObject *Sender)
+void __fastcall TDCHookMainForm::tmReInitTimer(TObject *Sender)
 {
-       tmReInit64->Enabled = false;
-       Unhook();
-       Hook();
+       // amodi.exe\82Ìlaunch\82É\94ñ\8fí\82É\8e\9e\8aÔ\82ª\82©\82©\82é\8fê\8d\87\82ª\82 \82é
+       // ex.\8cÃ\82¢PC\82Åstartup\82É\93o\98^\82µ\82Ä\82¢\82é\8fê\8d\87
+       //    \81¨input idle\82É\82È\82Á\82Ä\82àmain window\82Ì\90\90¬\82É\8e\9e\8aÔ\82ª\82©\82©\82Á\82Ä\82¢\82é\82Ì\82©\82à\82µ\82ê\82È\82¢
+       // AMODIAvail\82ªtrue\82É\82È\82é\82Ü\82Å\8f\89\8aú\89»\82ð\91±\82¯\82é
+       tmReInit->Enabled = false;
+       SetupAMODI();
+       if (AMODIAvail){
+               SetupConfig2();
+       }
 }
 //---------------------------------------------------------------------------
 // Mouse Events
@@ -649,7 +655,7 @@ bool TDCHookMainForm::Hook()
                return true;    // already loaded
        }
 
-       bool use64 = Ini->ReadInteger(PFS_CONFIG, PFS_USE64, false);
+       bool use64 = Ini->ReadInteger(PFS_CONFIG, PFS_USE64, DEF_USE64);
        hDll = new TDCHookLoader(use64);
        if (!hDll->LoadHook(Handle)){
                DBW("Load failed");
@@ -908,10 +914,14 @@ bool DdePoke( TDdeClientConv *dde, AnsiString Item, AnsiString Data )
        bool r = false;
        if ( hszDat ){
                HDDEDATA hdata = DdeClientTransaction( (LPBYTE)hszDat, (DWORD)-1, (HCONV)dde->Conv, hszItem,
-               dde->DdeFmt, XTYP_POKE, 10000, NULL);
-               r = hdata ? true : false;
+                       dde->DdeFmt, XTYP_POKE, 10000, NULL);
+               if (hdata || DdeGetLastError(ddeMgr->DdeInstId) != DMLERR_NO_ERROR){
+                       r = true;
+                       if (hdata)
+                               DdeFreeDataHandle( hdata );
+               }
        }
-       DdeFreeStringHandle (ddeMgr->DdeInstId, hszItem);
+       DdeFreeStringHandle(ddeMgr->DdeInstId, hszItem);
        return r;
 #endif
 }
@@ -928,10 +938,15 @@ bool DdePoke( TDdeClientConv *dde, AnsiString Item, const wchar_t *Data )
        bool r = false;
        if ( hszDat ){
                HDDEDATA hdata = DdeClientTransaction( (LPBYTE)hszDat, (DWORD)-1, (HCONV)dde->Conv, hszItem,
-               ddeFmt, XTYP_POKE, 10000, NULL);
-               r = hdata ? true : false;
+                       ddeFmt, XTYP_POKE, 10000, NULL);
+               if (hdata || DdeGetLastError(ddeMgr->DdeInstId) != DMLERR_NO_ERROR){
+                       r = true;
+                       if (hdata)
+                               DdeFreeDataHandle( hdata );
+               }
+       }
        }
-       DdeFreeStringHandle (ddeMgr->DdeInstId, hszItem);
+       DdeFreeStringHandle(ddeMgr->DdeInstId, hszItem);
        return r;
 }
 #endif
@@ -1335,6 +1350,8 @@ void TDCHookMainForm::SetupAMODI()
                                HWND hwnd = FindAMODI();
                                if (hwnd)
                                        AMODIAvail = true;
+                               else
+                                       tmReInit->Enabled = true;       // retry later
                        }
                }
        }