2009-08-03 6 views
0

私は簡単なウィンドウズcmdプログラムを作成しています。インスタンスが表示されます.. 私のコードで..名前付きミューテックス(名前はGUID)を追加..プログラムの2番目のインスタンスが開始された場合、それはあなたがすでにインスタンスを持っていることを伝えるメッセージを表示します実行中..Cmdウィンドウ間のフォーカスを切り替え、フォーカスを強制する(プログラム実行中に1つの瞬間を保ちます)

メッセージを表示する代わりに、自動的に既に実行中のプロセス(ウィンドウ)を見つけ、フォーカスを切り替えてから閉じることができます。

今私は使用しようとしています

FindWindow(NULL,window_name); 
SetForegroundWindow(window); 

ただし、(タスクマネージャーから)ウィンドウ名を渡すと、見つからない!!! エラー:未使用:S が奇妙で、 私はさらにタスクマネージャの名前を使用しようとしました。それでもそれを見つけることはできませんでした!

私は何かを指摘することができますが、どこが間違っていましたか? :) あなたがそのような仕事をする他の方法を考えることができるなら、私に教えてください。

注:仕事中の友人は、私にenumwindowsを使用するように言った、それは良い選択ですか?それについて)... thx多く!

答えて

1

ここには、この件に関する素晴らしい記事http://delphi.about.com/od/windowsshellapi/l/aa100703c.htmがあります。あなたが「実行を する方法を学びます。この記事では

プログラミングデルファイへのAbout.comガイド - アプリケーションインスタンスの数Zarko Gajicによって

をControling

(実行中の)インスタンスの をチェックできるDelphi アプリケーションです。 のプロセスに沿って、そのようなチェックを実装するいくつかの技術は、 となります。ユーザーが を実行して「もう一度」を実行しようとすると、既に実行中のアプリケーションを に転送する方法と同様に、フォアグラウンドを にします。 の末尾には、 の アプリケーションの複数のインスタンスの動作を制御するコード があります。 、実行中のインスタンスの数を制限するオプションがあります( )。

提示されたソリューションはDelphiでプログラミングされていますが、コードはかなりわかりやすいので、C++に簡単に翻訳する必要があります。

+0

私はすでにチュートリアルを以前に見つけましたが、役に立たなかったのです。 私の問題は技術そのものではなく、窓。 あなたの努力のためにthxがたくさんあります.. –

+0

まあ、それは記事がFindWindowメソッドの信頼性について言うものです。多くの場合、ウインドウタイトルに表示される非常に正確なテキストをチェックしないことがあります。だから、この記事ではいくつかの選択肢を提案しています。 –

1

EnumWindowsは、正確なウィンドウ名(部分一致)がわからない場合に便利です。

「taskmanagerの名前は何を意味するのかわかりませんが、FindWindow関数の2番目のパラメータは、ウィンドウのタイトルと一致する必要があります。

EnumWindowsを使用した例:その後、

BOOL CALLBACK WorkerProc(HWND hwnd, LPARAM lParam) { 
    static TCHAR buffer[50]; 

    GetWindowText(hwnd, buffer, 50); 
    if(_tcsstr(buffer, "window name goes here")) { 
     // do something with hwnd here 
     return FALSE; 
    } 

    return TRUE; 
} 

そして、このようにそれを呼び出す:あなたが必要なもの

EnumWindows(WorkerProc, NULL); 
+0

@arul:よくEnumwindowsは私のアプリケーションにコールバックの楽しみを実装する必要があります。 私はウィンドウのタイトルとプロセス名の両方を使ってみましたが失敗しました:S ... –

+0

私は私の更新しました。私は私のウィンドウをenumwindowsがenumwindした後に何もすることはもちろん、 EnumWindowsの例で答えてください。 – arul

1

はシングルトンアプリケーションです。これには多くの例があります。私の友人は何年も前に別のサイトに記事を書いていました。おそらくこれを行うより良い方法がありますが、は彼の記事です

関連する問題