1

自動インストーラーを作成することになっています。起動するプログラムだけで、ユーザーが何も触れずに、インストールウィザードをすべて単独で実行する必要があります。

私が現在取り組んでいるプログラムは、Cygwin と呼ばれます。そして、私がやりたいことは、インストールが完了するまで「次へ」ボタンを何度もクリックすることです。VBS を使用できることはわかっていますし、C# を使用できることもわかっています。しかし、別のプログラムでどのように機能するかの例があり、C++ の Cygwin に適応させようとしています。

    HWND WINAPI FindWindowEx(
      _In_opt_  HWND hwndParent,
      _In_opt_  HWND hwndChildAfter,
      _In_opt_  LPCTSTR lpszClass,
      _In_opt_  LPCTSTR lpszWindow
      );

これは、ボタンを見つけるために使用している関数であり、次のステップではクリックされるはずです。hwndParent にプログラム ウィンドウがあり、正常に動作します。hwndChildAfter と lpszClass は「NULL」で、lpszWindow はボタンの名前です。これは、ボタン「Abbrechen」(ドイツ語でキャンセル)で機能します。しかし、その名前を "Weiter" (ドイツ語で次へ) に変更すると、機能しなくなります。彼はそれを見つけられません。「Weiter」の書き方に関係があると思います。その唯一の言葉ではありません。式全体は "Weiter >" です。もちろん、"Abbrechen" の場合と同じように、式全体を "" で囲んで lpszWindow に入れます。しかし、私が言ったように、彼はそれを見つけられません。私はそれを書くためのすべてのバリエーションを試しましたが、うまくいきません。

">" または " " (スペース) が問題であり、それが原因で読めないことを誰かが知っていますか? もしそうなら、それを回避する方法はありますか?または、マウスのクリックをどこに設定するかをプログラムに伝えるために使用できるボタンまたは同様のもののIDを取得することは可能ですか。

私が言ったように、C++ は実際にはこのタスクに最適な言語ではないことを知っています。しかし、なぜ "Abbrechen" で機能し、なぜ "Weiter >" で機能しないのかを知りたいです。

だから誰かが解決策を持っていれば、私はとても感謝しています。ありがとう!

4

1 に答える 1

3

ボタンの実際のテキストには、アクセラレータ キーのテキストだけで"Weiter >"なく、そこにも含まれていると思われます。&を押しAltてみて、その下にアンデススコアが付いた文字が表示されるかどうかを確認してください。その場合、その文字には接頭辞&.

ただし、この「ソリューション」は実際にはかなり薄っぺらで、簡単に壊れてしまう可能性があります。たとえば、ユーザーのシステムで別の言語が構成されている場合はどうなるでしょうか。

変更される可能性が低いボタンの ID を取得することは可能です。ただし、最初にインストーラー ウィンドウを見つけてから、その子ウィンドウを列挙する必要があります。ボタンの ID を見つけるには、JosephH がコメントで提案したように Spy++ を使用します。

于 2013-02-13T18:50:24.857 に答える