2012-10-12 27 views
4

我遇到了問題FindWindow使用pywin32擴展名。 簡單C代碼:FindWindow失敗

int main() 
{ 
    HWND h = FindWindow(NULL, TEXT("SomeApp")); 
    if (h != INVALID_HANDLE_VALUE) 
     SetForegroundWindow(h); 
    return 0; 
} 

工作的很好。與python相同:

import win32gui 

h = win32gui.FindWindow(None, "SomeApp") 
if h: 
    win32gui.SetForegroundWindow(h) 
else: 
    print "SomeApp not found" 

失敗,SomeApp未找到。我建議文本編碼可能會造成麻煩,但在文檔中找不到任何有關如何指定文本的信息。

更新: 我測試過其他機器上的代碼,並沒有看到任何麻煩。所以,我的第一臺機器上的配置應該是不正確的。如果發現問題,我會更新調查結果。

+0

你是否在IDLE中運行你的代碼,因爲我剛剛嘗試過與windows calc類似的代碼,並且它不在IDLE中工作,而是直接在命令行中的py shell中運行。 – halex

+2

它也被稱爲Python中的SetForegroundWindow。第一個字符是大寫 – halex

+0

我只是在setForeground函數中輸入錯誤。在我的完整列表中,我還有其他聲明。我不使用IDLE,從cmd.exe運行腳本。感謝您的反饋。 – Torsten

回答

1

在C代碼中,您正在檢查h != INVALID_HANDLE_VALUE,在Python中爲h != NoneINVALID_HANDLE_VALUE不是0/null/None

Python定義了win32file.INVALID_HANDLE_VALUE通過win32file導入。

此外,而不是印刷「SomeApp未找到」,你可以這樣做:

gle = win32api.GetLastError() 
err = win32api.FormatMessage(gle)[:-2] 
print 'SomeApp not found: LastError=%d - %s' % (gle, err) 

這應該給你失敗的更多細節,如果FindWindow已經合法由於某種原因失敗(或「成功」如果它工作)。

+0

一致認爲,它看起來更合理,但FindWindow返回具有__non_zero__方法的PyHandle對象。 – Torsten

+0

我真的不知道麻煩在哪裏。在完全重新安裝python(2.7)和pywin32之後,它可以解決問題。我已檢查爲接受答案,因爲沒有其他答案。 – Torsten