1 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:39:56 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-5 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
51 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:32:28 ] >>48 だからVC使えと(ry デバッガだけでもVCを使う価値は十分にあると思うが、どうしてもMinGWを使わなければならない理由でもあるのか?
52 名前:デフォルトの名無しさん [2007/11/12(月) 22:37:23 ] WindowsはZIPを解凍するAPIを標準で持っているんでしょうか? また、あるとしたらどのバージョンからなんでしょうか。
53 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:41:39 ] ねーよ
54 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:47:42 ] >>48 ビットマップが24ビットだからじゃね? 256色以下にしてみ
55 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:50:18 ] パソコンの画面をキャプチャーしてメモリ内に格納したいのですが、 GetDCでデスクトップのデバイスコンテキストを取得し、 GetPixelで1ピクセルずつ取得する方法より、効率の良い方法は何かあるでしょうか?
56 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:52:53 ] DIB
57 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:13:33 ] >>52-53 ZIPフォルダを実現する関係上、ZIPファイルはシェルフォルダとして読み書きできる。 Me/XPから標準搭載だが、98ではPlus!に付いてきたはず。 また、2000でもMeからDLLを持ってくれば使える。 ようするにWindowsのバージョンなんて当てにしないで、 実際に試してみて成功すればOKという方針で行け。
58 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:18:59 ] >>55 BitBlt
59 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:19:51 ] >>57 OS再インスコしたら真っ先にregsvr32 /u zipfldr.dllなんだが そんな不確かな物に頼るぐらいなら普通にunzip32やzlibでも使えばいい
60 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:20:33 ] >>55 1ピクセルごとじゃなくて普通にBitBltじゃだめなのか
61 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 09:29:25 ] >>59 自分で機能切ってるヤツまで知ったこっちゃねーだろ・・・
62 名前:デフォルトの名無しさん [2007/11/13(火) 09:32:21 ] delphiのぐだすれで質問したらすれ違いと言われたのでここに来ました。 WindowsXPのアクティベーションとかで使用しているようなハードウェアハッシュを 自前のプログラムでも使用したいのですが どうやったら取得できますでしょうか。 すれ違いでしたら誘導願います。
63 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 10:50:43 ] >>61 そもそもなぜ圧縮フォルダをプログラムから直接利用する必要があるのかサッパリなんだが 外部DLL不要、世界最小のZIP解凍ソフト!とか作りたいのかねぇ
64 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 12:04:19 ] >>28 です。 >>54 本当にありがとうございます。解決しました。
65 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 14:08:15 ] >>63 お前、とことん読解力ないな
66 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 14:21:45 ] ( ´,_ゝ`)プッ
67 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 14:42:28 ] 言語問わずWin32APIが呼び出せるインタプリタ環境ってありますか?
68 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 14:49:17 ] Perl
69 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 15:23:49 ] >>68 ありがとうございます、調べてみます
70 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 16:22:08 ] PowerShell
71 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:05:04 ] >>70 こんなものもあるんですね、不勉強ですみません
72 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:34:14 ] APIとか一寸試したい時に、そういうのが欲しいとちょっと思わなくもないが、 結局Cや、GUI絡みでもMFC使えば簡単に試せるからなあ。
73 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 01:04:06 ] >>56 ありがとうございます。調べて見ます >>60 >>58 取得した画面をファイルに出力したりネットワークで送信したりしたいのですが、 BitBltだと、出来ませんでした
74 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 01:08:18 ] そういう場合はGetDIBitsで検索
75 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 06:05:51 ] >>72 環境勝手にいじれない(非開発の)PCではAPI使うのにofficeのVBAしかなかったりするんだよ… MSはPowerShell を優先度の高い更新に含めやがれ あるいは会社のPCをすべて2008にしてください
76 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 06:23:03 ] .NETは結局XPに標準搭載されなかったんだっけか
77 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 10:13:29 ] 標準搭載しなくていいよ
78 名前:デフォルトの名無しさん [2007/11/14(水) 11:30:13 ] ファイルだの日時をコピーもしくは変更するAPIを教えてください
79 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 12:09:27 ] SetFileTime GetFileTime
80 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 12:09:41 ] 日本語でおk
81 名前:78 [2007/11/14(水) 13:12:30 ] フォルダでした。 ところでこれってFATでも機能するのでしょうか?
82 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 13:33:53 ] 解説ぐらい読んで来い msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_getfiletime.asp
83 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 14:56:30 ] SendMessageで書き直したいのですが、どのように書き直せばよいのか教えてください。 (VB2005です)↓ 'キーコード送信 Dim DownUp As Integer = 0 Dim Down As Integer = 1 Dim Up As Integer = 2 Private Sub KBD(ByVal KEY_CODE As Byte, ByVal 状態 As Integer, ByVal ms As Integer) Sleep(ms) If 状態 = 1 Then Call keybd_event(KEY_CODE, 0, 0, 0) ElseIf 状態 = 2 Then Call keybd_event(KEY_CODE, 0, &H2, 0) ElseIf 状態 = 0 Then Call keybd_event(KEY_CODE, 0, 0, 0) Call keybd_event(KEY_CODE, 0, &H2, 0) Else End If End Sub
84 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:09:01 ] keybd_eventがやってることはSendMessageじゃエミュレートできないと思うんだが
85 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:11:05 ] 場合による
86 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:14:41 ] キーイベントはポストだろ
87 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:16:27 ] ポストだとどんな感じですか?
88 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:19:42 ] マニュアル嫁
89 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 17:31:09 ] ポストはポストでも、マルチポストだろ
90 名前:デフォルトの名無しさん [2007/11/14(水) 21:50:10 ] いろんな方が質問されている内容ですがうまくいかないので質問させてください。 WS_EX_LAYERED、SetLayeredWindowAttributes、LWA_COLORKEY、IDB_CHRISTALについて 「定義されていない識別子です。」というエラーでコンパイルできません。 ソースは以下のサイトを見ながら書いています。 www.kumei.ne.jp/c_lang/sdk4/sdk_346.htm 環境はVC++6.0、OSはWindowsXP SP2です。 やってみたこと ・ServicePack6 の適用 ・Windows Server 2003 SP1 Platform SDK の PSDK-x86.exeをダウンロードしてインストール →C:\Program Files\Microsoft Platform SDK\Bin\Orca.Msi を実行 ・ソースに#include<WinUser.h> を追記 対処法がありましたら教えていただきたいです。
91 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 21:56:14 ] VC++のインクルードディレクトリの設定を変えろ。 新しいPlatform SDKのインクルードディレクトリを指すように。 winuser.hは昔も今もwindows.hの中でインクルードされるから、 自分でインクルードを明記する必要はない。
92 名前:デフォルトの名無しさん [2007/11/14(水) 22:33:26 ] VC++のディレクトリとPlatFormSDKのディレクトリで 階層構造が多少違うようなのですが、、、、 で、適当にやったらインクルードファイルがオープンできませんってなりました・・・。(;つД`) メニューのツール -> オプション -> ディレクトリ タブ の中の設定を変更したんですが違いました?
93 名前:90=92 mailto:sage [2007/11/14(水) 22:42:22 ] WS_EX_LAYERED については警告はでなくなりましたが 下記エラーが出ます。インクルードディレクトリの指定がマズイのでしょうか? error LNK2001: 外部シンボル "__imp__SetLayeredWindowAttributes@16" は未解決です
94 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:43:10 ] _WIN32_WINNTとかWINVERとかじゃね?
95 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:52:14 ] >>75 ExcelあるならスクリプトからExecuteExcel4MacroでCALL Win32API
96 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:05:20 ] >>93 インクルードパス同様、ライブラリパスも設定する必要があるぞ。
97 名前:90=92=93 mailto:sage [2007/11/14(水) 23:05:55 ] >>94 ソース冒頭で #define _WIN32_WINNT 0x0500 を指定しています。 WINVERというのが良くわかりませんが #define WINVER 0x0400 と指定したところではエラーの内容は変わらずでした。
98 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:12:44 ] >>97 つーかVC6で使えるSDKの最終バージョンって2003年2月ぐらいの奴じゃなかったっけ? 一応2003SDKとかも使えなくも無いがリンクエラー出ることあるからやめといた方がいいと思うぞ
99 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:16:43 ] >>93 ライブラリのパス
100 名前:90=92=93=97 mailto:sage [2007/11/14(水) 23:29:14 ] できました━━━━(゚∀゚)━━━━!!!!。 ありがとうございました。
101 名前:90=92=93=97=100 mailto:sage [2007/11/14(水) 23:44:52 ] >>98 ttp://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en ↑ これには ”Date Published: 5/2/2005 ”とあるようです。 このSDKはあんまり薦められないってことですか? 今回はこれでないと動かない代物だったので仕方ないですが 必要なければ使わないほうが良いのでしょうか?
102 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:46:11 ] タスクトレイのアイコン上でマウスホイールで操作したときに処理をすることを 考えているんですが、タスクトレイのアイコン上でマウスホイールを操作しても、 WM_MOUSEWHEELがとんできません。 WM_MOUSEWHEELをフックしても、タスクトレイのどのアイコン上なのか 識別する方法がわかりません。 NOTIFYICONDATAのhWndとかuIDを判別する方法ありませんか?
103 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:46:54 ] 今ならWindowsSDKだけで十分なような気も
104 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:49:38 ] >>102 状況がよくわからんけど・・・ タスクトレイから通知が来たときのLPARAMを見てみる
105 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:52:04 ] あ、違うか どのアイコンか判定したかったらShell_NotifyIconのAPIフックからしないと駄目な気が 通知メッセージはユーザー定義だからフックできんし WM_MOUSEWHEELは普通にタスクトレイが受け取ってるはず
106 名前:102 mailto:sage [2007/11/15(木) 00:13:14 ] >>105 レスどうもです。 えとですね。 自分のアプリで登録しているアイコンなんですよ。 タスクトレイのアイコン上で操作したときに、 例えば左クリックならばWM_LBUTTONDOWNは来るんですが、 マウスホイール操作のWM_MOUSEWHEELは来ないんです。 なので、WM_MOUSEWHEELをフックして処理しようかと思ったのですが、 自分のアプリで登録しているタスクトレイのアイコン上であるかどうかの 判別ってどうするんだ?と困っているところなのです。
107 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:24:41 ] >>101 そのページに書いてあるでしょ >This SDK does not support working with Microsoft Visual C/C++®, 6.0 as support for VC 6.0 has ended. >The last SDK that will work with VC 6.0 is the February 2003 Edition, you can order a CD on the fulfillment site. 2003年2月版でもXPSP1ぐらいまではサポートしてるので普通に使う分には困らないと思う
108 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 04:44:07 ] >>81 NT系ならFATでも使える。まだ9xサポートしてるのか?
109 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 06:19:56 ] >>95 知らなかった。ちょっと楽になる。サンクスですわ
110 名前:デフォルトの名無しさん [2007/11/15(木) 06:46:39 ] zipの圧縮、解凍をサポートするapi関数ってある? Jpegの伸縮のように、外部ライブラリ入れないとダメかな
111 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 08:09:45 ] なんでXPでzipfldr.dllなんてDLLが追加されたか考えれば分かるだろう
112 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 08:16:37 ] スレ違いだけど.NETならGZipStreamクラスある
113 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 08:49:12 ] zip圧縮解凍ライブラリなんてネット上に腐るほどあるだろ zipfldrを呼び出す方が遥かに面倒だと思うが
114 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 10:05:12 ] COM使ったことあれば、そう面倒でもないと思うが・・・まぁ人それぞれか
115 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 11:24:13 ] zipfldr.dllのCOMインターフェイスって公開されてたっけ? IShellFolder::GetUIObjectOfでIDropTargetを取得してD&Dをエミュレートして・・・とか考えたけど結構面倒な気が 他に方法あったらおせーて
116 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 11:56:30 ] rundll32.exe zipfldr.dll,RouteTheCall %zipfile% これか?ためしてないけど
117 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:05:42 ] CLSIDFromString("CompressedFolder",&clsid); CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IStorage,(LPVOID*)&pStorage); pStorage->QueryInterface<IPersistFile>(&pPersistFile); pPersistFile->Load("zipファイル名",STGM_READWRITE|STGM_SHARE_EXCLUSIVE); てな感じ、足りないとこは脳内補完よろ あとはIStorageとIStreamの操作で中身読める。 書き込みは試したことないけど・・・、たぶん似たような手順でいけるとおもふ
118 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:10:27 ] それって rundll32.exe unzip32.dll,UnZipCommandLine "%1" と同レベルな気が
119 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:12:31 ] リロードしてなかった >>118 は>>116 へのレス >CLSIDFromString("CompressedFolder",&clsid); これって将来的に大丈夫なのかな? そんなモン気にするなってツッコミは無しで
120 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:21:32 ] 質問です。 SetWindowsHookEx でグローバルフック登録しているのですが、runas 等で別のユーザで起動したウィンドウへのメッセージがフックできないようです。 普通の (同じユーザ) ウィンドウへのメッセージはフックできています。 何か方法はありますか?
121 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:23:56 ] 別ユーザのウィンドウがフック出来たらセキュリティホール以外の何物でもないだろう ImpersonateLoggedOnUserとか使えばどうにかなるかも知れんが
122 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:27:09 ] 自分も昇格する
123 名前:120 mailto:sage [2007/11/15(木) 13:06:13 ] >>121 そういわれればそうですねぇ。 まあ、今回のは特殊用途なので権限は気にしなくていいのですが・・・ ImpersonateLoggedOnUser 知らなかったので調べます。
124 名前:110 [2007/11/15(木) 15:11:57 ] c++は使えないから、comとか無しで頼む 普通にapi関数を一本呼び出し(ループでも)で使えないの?
125 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:14:11 ] 無理だっつうの
126 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:15:27 ] もう自分でdeflate書け
127 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:18:37 ] >>124 例えCでもCOMは使えるぞ いったい何を言ってるんだ?
128 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:20:07 ] >>124 unzip32使え 嫌なら.net使え いずれにせよスレ違いだからもう来なくていいよ
129 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:20:30 ] (124は)CでCOMが使えない
130 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:25:45 ] 124では無いがCでCOMなんて面倒すぎるだろ 第1引数省略できねーしスマートポインタ使えねーしlpVtblとか一々書いてられるか
131 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:28:31 ] で、だから何?
132 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:30:40 ] 124みたいな奴がCでCOMなんかに手を出すとリークしまくりの糞プログラムにしかならんだろうという事だ
133 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:35:16 ] なるほど
134 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:58:01 ] >>110 一般公開されていないよ、MSのZIP解凍/圧縮は。 APIもCOMも。
135 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:04:43 ] このスレでいいのかどうか悩んだんですが 『Advenced Windows』を読む上で、Win32APIやOSの知識は前提になっているのでしょうか? C/C++は一通りやったけどWindowsプログラムは未経験という段階の人間が、 >>1 にある言葉を借りると「APIフックなど高度な事」が最終目標だという場合、 先に『プログラミングWindwos』などを読んでおくべきなのかどうかと思いまして。
136 名前:デフォルトの名無しさん [2007/11/16(金) 00:27:30 ] www.kumei.ne.jp/c_lang/sdk4/sdk_346.htm 上記のプログラムでCreateWindowExにてウィンドウスタイルを WS_OVERLAPPEDWINDOW としているのを WS_POPUP に置き換えるとウインドウが表示されなくなってしまうのですがどうしてでしょうか? 枠線が消えるのはわかりますが、表示されていたはずのピットマップまで消えてしまうので 納得できませんでした。 よろしくお願いします。
137 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:31:11 ] 基礎的なAPIの知識は必要。 最終的にAdvenced Windowsを買う「べき」なのは間違いないと思うけど入門には向かない。 4倍ぐらいの量と金額のEffectiveC++ or STLを入門として買うようなもの。 個人的には APIで学ぶWindows徹底理解 ちゅうのが激しくオススメ
138 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:31:46 ] どこでエラーが出てるか調べろ
139 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:33:44 ] 沢山のソースコードを読むほうがためになると思う。
140 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:53:01 ] >>139 に同意
141 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:07:23 ] >>137-139 アンカーつけて喋れw
142 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:18:33 ] はい
143 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:42:04 ] いいえ
144 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:47:24 ] はいえ
145 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 02:14:27 ] ないあるよ
146 名前:135 mailto:sage [2007/11/16(金) 02:17:40 ] >>137 分かりやすい解説、ありがとうございました。 おすすめいただいた書籍、目次見てたらおもしろそうなので、 是非目を通してみたいと思います。
147 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 05:04:23 ] >>136 CW_USEDEFAULTはWS_OVERLAPPEDでないと効果がない。 WS_POPUPだと単にサイズゼロのウィンドウが画面外に作成されてしまう
148 名前:デフォルトの名無しさん [2007/11/16(金) 11:22:25 ] TextOutで表示させる文字のフォントを変更したいのですが、 どのようにすればいいのでしょうか?
149 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:35:57 ] SelectObject
150 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:58:39 ] もっといえばCreateFont→SelectObject
151 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 12:04:38 ] スレ違いの場合は誘導をお願いします。 今、生DVDにデータを書き込むプログラムを作っています。理想は、時系列で増え続けるデータを direct recordingすることです。 ところがまず、Windows 2003 DDK添付のspti.cでWRITE DATA BUFFER operationがエラーコード2で 失敗する所ではまっています。 そもそも生DVDに対しては、spti.cでは書き込みは行えないのでしょうか?