タグ付けされた質問 「winapi」

Windows API(以前はWin32 APIと呼ばれていました)は、Microsoft Windowsオペレーティングシステムで使用できるアプリケーションプログラミングインターフェイスのコアセットです。このタグは、Windows APIを使用したネイティブWindowsアプリケーションの開発に関する質問に使用します。



8
グローバルホットキーを登録したプロセスを確認してください。(Windows API)
私が知る限り、Windowsには、どのアプリケーションがグローバルホットキーを(RegisterHotkeyを介して)登録したかを通知するAPI関数がありません。RegisterHotkeyがfalseを返した場合にのみホットキーが登録されていることを確認できますが、誰がホットキーを「所有」しているかはわかりません。 直接APIがない場合、回り道はありますか?Windowsは、登録された各ホットキーに関連付けられたハンドルを維持します。この情報を取得する方法がないことは少し厄介です。 機能しない可能性のあるものの例:登録されたホットキーを送信(シミュレーション)し、Windowsがそれを登録したプロセスに送信するホットキーメッセージをインターセプトします。まず、メッセージを傍受しても宛先ウィンドウハンドルが明らかになるとは思わない。第2に、たとえ可能であったとしても、ホットキーを送信するとさまざまなプログラムからあらゆる種類の潜在的に望ましくないアクティビティがトリガーされるため、それを行うことは悪いことです。 それは重要なことではありませんが、私はそのような機能に対する頻繁な要求を見てきました。私自身は、UIまたはドキュメントのどこにもそれを開示することなくホットキーを登録するアプリケーションの犠牲者になっています。 (Delphiで働いており、WinAPIの見習いにすぎません。親切にしてください。)


12
パスが有効かどうかを確認する
私はただ疑問に思っています。与えられたパスが有効かどうかを検証する方法を探しています。 (注:ファイルが存在するかどうかを確認したくない!パスの有効性を証明したいだけなので、その場所にファイルが存在する可能性がある場合)。 問題は、.Net APIで何も見つからないことです。Windowsがサポートする多くのフォーマットと場所のため、私はむしろMSネイティブの何かを使用したいと思います。 関数は以下に対してチェックできるはずなので、 相対パス(./) 絶対パス(c:\ tmp) UNCパス(\ some-pc \ c $) フルパス1024文字のようなNTFSの制限-パスを超えて間違えていないと、多くのWindowsの内部機能でファイルにアクセスできなくなります。Explorerで名前を変更しても機能する ボリュームGUIDパス: "\?\ Volume {GUID} \ somefile.foo 誰かがこのような機能を持っていますか?
110 c#  .net  winapi  path 

4
dllexportを使用してDLLから関数をエクスポートする
C ++ Windows DLLから関数をエクスポートする簡単な例を教えてください。 ヘッダー、.cppファイル、および.defファイル(絶対に必要な場合)を確認したい。 エクスポートされた名前を装飾しないでください。最も標準的な呼び出し規約(__stdcall?)を使用したいと思います。ファイル__declspec(dllexport)を使用する必要はありません.def。 例えば: //header extern "C" { __declspec(dllexport) int __stdcall foo(long bar); } //cpp int __stdcall foo(long bar) { return 0; } 名前にアンダースコアや数値(バイトカウント)が追加されないようにしています。 同じヘッダーをサポートせずdllimport、dllexport使用してもかまいません。C ++クラスメソッドのエクスポートに関する情報は必要ありません。Cスタイルのグローバル関数だけです。 更新 呼び出し規約を含めない(およびを使用するextern "C")と、希望どおりのエクスポート名が得られますが、それはどういう意味ですか?pinvoke(.NET)、declare(vb6)、およびGetProcAddress予想されるデフォルトの呼び出し規約は何ですか?(GetProcAddressこれは、呼び出し元が作成した関数ポインターに依存すると思います)。 このDLLをヘッダーファイルなしで使用したいので#defines、呼び出し元がヘッダーを使用できるようにするために、それほど多くの機能を必要としません。 私は*.defファイルを使用しなければならないという答えで大丈夫です。

15
一意のマシンIDを生成する
Windows OSを実行している特定のマシンに固有のIDを生成する関数を作成する必要があります。 現在、WMIを使用してさまざまなハードウェアパラメーターを照会し、それらを連結してハッシュして、一意のIDを導出しています。私の質問は、使用すべき推奨パラメーターは何ですか?現在、bios \ cpu \ diskデータの組み合わせを使用して一意のIDを生成しています。また、各メトリックに複数の結果がある場合は、最初の結果を使用しています。 しかし、2つの異なるWindows OSでデュアルブートするマシンが各OSで異なるサイトコードを生成するという問題に遭遇しました。 参考までに、私が現在使用している指標は次のとおりです。 Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed Win32_BIOS:Manufacturer Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber Win32_VideoController:DriverVersion, Name

6
メッセージポンプとは
で、このスレッド(約一年前に掲示)非対話型セッションでWordを実行して来ることができる問題の議論があります。与えられている(かなり強い)アドバイスはそうするべきではありません。ある投稿では、「Office APIはすべて、モニター、キーボード、マウス、そして最も重要なのはメッセージポンプを備えたデスクトップ上のインタラクティブセッションでOfficeを実行していることを前提としています」と述べています。それが何なのかよくわかりません。(私はC#で約1年間プログラミングしています。他のプログラミング経験は主にColdFusionでの経験です。) 更新: 私のプログラムは、多数のRTFファイルを実行して、医療レポート番号の作成に使用される2つの情報を抽出します。RTFでのフォーマットの指示がどのように機能するかを理解するのではなく、Wordで開き、そこからテキストを(実際にはGUIを起動せずに)取り出すだけにしました。ときどき、プログラムは1つのファイルの処理中に中断し、そのドキュメントに添付されたWordスレッドを開いたままにしました(まだ、そのファイルをシャットダウンする方法を理解する必要があります)。プログラムを再実行すると、もちろん、そのファイルを使用するスレッドがあるという通知が表示されました。読み取り専用のコピーを開きますか?私が「はい」と言ったとき、Word GUIが突然どこからもポップアップし、ファイルの処理を開始しました。なぜそうなったのかと思っていました。

9
透明な背景でOpenGLレンダリングコンテキストを作成する方法
レンダリングコンテキストは通常​​、背景に単色(黒または何でも、下の画像を参照)があります。 OpenGLのものをその上にレンダリングできるようにしながら、装飾なしで透明な背景を持つウィンドウをセットアップできるかどうか疑問に思っています。 これは、三角形が画面上に浮かんでいるような錯覚を与えます。透明な背景では、背後にある可能性のあるデスクトップまたはその他のアプリケーションを確認できます。 ソースコードで例示していただけませんか? プラットフォーム:Windows(win32のみ)

10
gettimeofday()はマイクロ秒の精度であることが保証されていますか?
私はもともとWin32 API用に作成されたゲームをLinuxに移植しています(Win32ポートのOS XポートをLinuxに移植しています)。 QueryPerformanceCounterプロセスの起動後、uSeconds を指定して実装しました。 BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount) { gettimeofday(&currentTimeVal, NULL); performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec); performanceCount->QuadPart *= (1000 * 1000); performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec); return true; } これはQueryPerformanceFrequency()、周波数として定数1000000 を与えることと相まって、私のマシンでうまく機能しuSeconds、プログラムの起動以降に含まれる64ビット変数を与えます。 これはポータブルですか?カーネルが特定の方法でコンパイルされた場合など、カーネルの動作が異なることを発見したくありません。ただし、Linux以外には移植できなくても問題ありません。

9
Win32アプリのデバッグ出力ウィンドウに出力するにはどうすればよいですか?
Visual Studio 2005に読み込んだwin32プロジェクトを持っています。VisualStudioの出力ウィンドウに印刷できるようにしたいのですが、私は一生かけてどのように作業するかできません。「printf」と「cout <<」を試しましたが、メッセージが頑固に印刷されません。 Visual Studioの出力ウィンドウに印刷する特別な方法はありますか?

3
LPCWSTRは何の略で、どのように処理する必要がありますか?
まず第一に、それは正確には何ですか?ポインタだと思いますが(LPCは長いポインタ定数を意味します)、「W」はどういう意味ですか?文字列への特定のポインタですか、それとも特定の文字列へのポインタですか?たとえば、「TestWindow」という名前のウィンドウを閉じたいとします。 HWND g_hTest; LPCWSTR a; *a = ("TestWindow"); g_hTest = FindWindowEx(NULL, NULL, NULL, a); DestroyWindow(g_hTest); このコードは不正であり、const char [6]をCONSTWCHARに変換できないため、機能しません。まったくわかりません。これらすべてのLPCWSTR、LPCSTR、LPSTRを明確に理解したいと思います。私は何かを見つけようとしましたが、さらに混乱しました。msdnサイトFindWindowExで次のように宣言されています HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow ); したがって、最後のパラメーターはLPCSTRであり、コンパイラーはLPCWSTRを要求します。助けてください。
91 c++  winapi  lpcstr 

8
Windowsで開いているすべての名前付きパイプのリストを取得するにはどうすればよいですか?
名前付きパイプが正しく機能しているかどうかをテストする簡単な方法はありますか?アプリから送信しているデータが実際に送信されていることを確認したいと思います。名前付きパイプすべてのリストを取得するための迅速で簡単な方法はありますか?
91 windows  winapi  pipe 

8
Windowsレジストリから値を読み取る方法
レジストリ値(HKEY_LOCAL_MACHINE \ blah \ blah \ blah \ fooなど)のキーが与えられた場合、どうすればよいですか? そのようなキーが存在することを安全に判断します。 プログラムで(つまりコードを使用して)その値を取得します。 私はレジストリに何かを書き戻すつもりはまったくありません(私がそれを助けることができれば私のキャリアの期間中)。したがって、レジストリに誤って書き込んだ場合、光速で爆発する体内のすべての分子についての講義をスキップできます。 C ++での回答を優先しますが、ほとんどの場合、値を取得するための特別なWindowsAPIの呪文が何であるかを知る必要があります。
90 c++  windows  winapi  registry 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.