- 1 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 18:56:13 ]
- 1 名前:デフォルトの名無しさん[] 投稿日:2009/08/02(日) 00:20:49
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ! 過去スレ、関連リンクは>>2-10くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build81 pc12.2ch.net/test/read.cgi/tech/1249140049/l50
- 175 名前:デフォルトの名無しさん [2009/10/03(土) 13:13:52 ]
- きえろぶっとばされんうちにな
- 176 名前:デフォルトの名無しさん [2009/10/03(土) 15:35:25 ]
- ファイルを削除(DeleteFile)することなく、削除が可能かを判断したいのですが、
よい方法はあるでしょうか。 権限やファイルがオープン済みである場合はCreateFileが失敗するかで判断出来そうなのですが、 実行中のEXEやロード済みのDLLではCreateFileが成功してしまいます。 削除可能かを知りたい理由ですが、利用しているライブラリで要求されているためです。 よろしくおねがいします。
- 177 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:47:16 ]
- きえろぶっとばされんうちにな
- 178 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:51:11 ]
- >>176
ない。
- 179 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 16:03:52 ]
- 確認した直後に別の誰かが削除不可にセットするかもしれないしな
- 180 名前:デフォルトの名無しさん [2009/10/03(土) 16:37:27 ]
- きえろぶっとばされんうちにな
- 181 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:02:17 ]
- >>178
諦めがつきます。すっきりしました。 >>179 確かにそうですね。
- 182 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:12:15 ]
- SFGAO_CANDELETEはどう?
APIじゃなくてIShellFolder::GetAttributesOf のCOMつかうけど
- 183 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 18:32:26 ]
- ハズレ
- 184 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 18:51:48 ]
- FILE_SHARE_DELETEつけて開ければ消せるんじゃ
- 185 名前:デフォルトの名無しさん [2009/10/03(土) 19:03:51 ]
- きえろぶっとばされんうちにな
- 186 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:20:01 ]
- >>182
情報ありがとです。まだ試せておらず、ぐぐり中です。 ただ、エクスプローラのメニュー上では実行中EXEも削除が選べるので、厳しそうに見えました。 試せましたら、報告します。 >>184 実行中のEXEやロード済みのDLLは削除には失敗しますが、 FILE_SHARE_DELETEをつけてもつけなくても開けてしまうので困ってます。
- 187 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:40:39 ]
- きえろぶっとばされんうちにな
- 188 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:55:23 ]
- エロぶっとばされんうちにな
- 189 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:58:04 ]
- >>182
試しましたら、実行中のEXEでもSFGAO_CANDELETEが有効でした。 情報ありがとうございました。諦めたいと思います。
- 190 名前:デフォルトの名無しさん [2009/10/03(土) 21:19:36 ]
- きえろぶっとばされんうちにな
- 191 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:38:20 ]
- ぴえろぶっとばされんうちにな
- 192 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:52:04 ]
- きえろぶっとばされんうちにな
- 193 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:01:11 ]
- もえろぶっとばされんうちにな
- 194 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:15:29 ]
- GENERIC_WRITEのみでCreateFileして
INVALID_HANDLE_VALUEが返るなら起動してるのでは?
- 195 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 09:59:54 ]
- >>194
これでいけそうです。有難うございます。 (試していたときはGENERIC_WRITEではなくてDELETEを使ってました。)
- 196 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:56:02 ]
- VSS に対応できる?
- 197 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:54:42 ]
- readonly属性がついてるとGENERIC_WRITEは失敗するが削除はできるだろ
- 198 名前:片山博文MZ ◆BVYGEn4LD2 [2009/10/04(日) 14:00:23 ]
- CellSheet ver. 0.0
www1.axfc.net/uploader/Sc/so/42369 すごいものを完成した。 ExcelやDataGridViewみたいなGUIがC++で簡単に実現できちゃう。
- 199 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:30:53 ]
- >>176
コイツ、 > 諦めたいと思います と言っておきながら何時まで粘着してんだ
- 200 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:35:00 ]
- DB のトランザクションみたいなことはできないんだから、
仮に判定に成功したからって、実際に削除するまでの間に 状況が変わることはありうるだろ? 何度も言われてるけど、「削除できるか?」なんてのは、意味のない判定なんだよ。
- 201 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:35:03 ]
- そのものズバリなAPIがあるのに誰も教えてあげなくてワロタw
- 202 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:36:15 ]
- >>201
自己紹介乙
- 203 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:37:29 ]
- >>200
> DB のトランザクションみたいなことはできないんだから、 DeleteFileTransactedも知らんのか。
- 204 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:39:20 ]
- 今時TxFも知らないなんてWin32プログラマとしては恥だな
- 205 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:41:34 ]
- 諦めないのはいいことだ
- 206 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:48:18 ]
- へー、Vista 以降で使えるのか。勉強になった。dクス。
- 207 名前:片山博文MZ ◆BVYGEn4LD2 [2009/10/04(日) 14:51:36 ]
- >>198
起動して位置を移動させずに最初に日本語を入力したときの、 CompositionWindowの位置がおかしいのだけど、どうすれば、 セルの上にCompositionWindowを表示させればいいでしょうか? www1.axfc.net/uploader/Img/so/61185.jpg
- 208 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 15:07:19 ]
- ふと思ったんだけど、
CreateFile等のAPIをフックして〜Transacted系へリダイレクトするソフトを作ったら サンドボックス的なものが出来そう?
- 209 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 15:33:06 ]
- >>199
回答をもらっておいて、諦めてるからもういいです、とは言えないので。 >>200 ライブラリで要求されていたので。 ライブラリのサンプルでも起動中EXEは考慮されてなかったんで、しょうがないですね。
- 210 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 15:45:46 ]
- >>208
commitはどうすんだ?
- 211 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 15:50:17 ]
- コミットしないんだろ、サンドボックスだから
実行終了したらすべてロールバック
- 212 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 15:52:39 ]
- CommitTransactionがあるだろ
- 213 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:00:15 ]
- ↑話を理解しないバカ
- 214 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:45:10 ]
- _UNICODEってどういう状況で定義されるの?
- 215 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:46:32 ]
- Windows環境内で言うなら取り扱いはすべてうにこーどのはず
- 216 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:55:38 ]
- じゃ、APIに渡す文字列を書くときにLが必須になるということ?
- 217 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:56:51 ]
- >>214
UNICODEを定義していたら。 もっとも、普通はUNICODEと共に両方定義するほうが普通(Visual Studioではそうなる)。
- 218 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:18:07 ]
- 質問をしっかりかかなくてすみません。
_Tというマクロがあっても無くても動いているように見えるんだけど、 そもそもなぜこんなマクロが必要なのか、それを調べていてはまってしまいました。 ここでいうUNICODEってUTF8とは違うよね?
- 219 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:34:12 ]
- Windows で Unicode といったら大体は UTF-16LE のことを指す
_T は文字列定数を ANSI と UNICODE の両対応にするためのマクロ ANSI ビルド場合 _T("foo") → "foo" UNICODE ビルドの場合 _T("foo") → L"foo" のように展開される
- 220 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:43:29 ]
- >>219
ANSIビルドとUNICODEビルドはどう違うんですか? 例えばgccでコンパイルするときはANSIだと思うけど、WindowsXPでは動いているし…
- 221 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:45:01 ]
- 自己解決しました、質問する前に検索すべきでした。すみません。
ambiesoft.ddo.jp/blog/archives/1161 ------------------------------ UNICODEでビルドする利点と欠点 利点 NT系OSで速くなる?NT系OSは内部的にUNICODEを使っているので、ANSI→UNICODEの変換が不要になる。 韓国語や中国語が使えるようになる。 日本語以外のNT系OSでも文字化けしないで実行できる。(フォントがある場合) 欠点 98系OSで動かなくなる。 Visual Studio 2008からデフォルトでUNICODEビルドになった。 ------------------------------ 日本人相手にしているだけなら、ANSIでいいわけですね
- 222 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 02:15:37 ]
- 日本人相手こそUNICODEだろ。
Shift_JISの2バイト文字よりUTF-16のほうが楽とは言えなくなってきたけど。 Windowsの場合、第三水準/第四水準漢字なんかはUnicodeでないと使えないし、 最近はMS-IMEもATOKもそんなShift_JIS外の文字を使った言葉も注意付きながら候補に表示するようになってきたし。
- 223 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 03:02:54 ]
- うにこーどうめぇ
- 224 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 03:15:33 ]
- >>218 >>220
MessageBoxA() ↓ MessageBoxW()
- 225 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 03:24:15 ]
- 非表示状態のwウィンドウを表示させようと、自プロセス内の他スレッドからShowWindow(hwnd, SW_SHOW)と呼んでも、
ウィンドウが非アクティブの状態で表示されてしまいますが、なんらかの制約が働いているんでしょうか。
- 226 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 03:28:30 ]
- スレッドまたいでる場合は制約が働いています
- 227 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 03:34:35 ]
- ありがとうございます。
AttachThreadInputかSetForegroundWindowなどを別に呼ぶ必要がありそうです。
- 228 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 07:57:34 ]
- ぶっとばされろきえんうちにな
- 229 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 08:16:21 ]
- あ?やんのか?
- 230 名前:デフォルトの名無しさん [2009/10/05(月) 14:03:50 ]
- きえろぶっとばされんうちにな
- 231 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 14:24:41 ]
- はい
- 232 名前:デフォルトの名無しさん [2009/10/05(月) 15:40:35 ]
- きえろぶっとばされんうちにな
- 233 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 15:43:43 ]
- はい
- 234 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 16:01:37 ]
- あ?やんのか?
- 235 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 16:04:17 ]
- はい
- 236 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 16:43:47 ]
- きえろぶっとばされんうちにな
- 237 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 17:04:23 ]
- はい
- 238 名前:デフォルトの名無しさん [2009/10/05(月) 17:21:15 ]
- はい
- 239 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:02:45 ]
- はいじゃないが
- 240 名前:デフォルトの名無しさん [2009/10/05(月) 18:08:18 ]
- きえろぶっとばされんうちにな
- 241 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:27:05 ]
- きえました
- 242 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:07:42 ]
- ぶっとばされろきえんうちにな
- 243 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:32:01 ]
- 何か裏技の発動条件みたいだw
- 244 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:59:59 ]
- ほーっ ほーっ
- 245 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:00:13 ]
- ほーたる来い
- 246 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:00:23 ]
- こっちのみーずは
- 247 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:00:31 ]
- 中国産
- 248 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:48:05 ]
- もうだめだこのスレ
- 249 名前:デフォルトの名無しさん [2009/10/05(月) 23:24:25 ]
- きえろぶっとばされんうちにな
- 250 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:30:00 ]
- 中国産
- 251 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:11:19 ]
- きえろふっとばされんういにな
- 252 名前:デフォルトの名無しさん [2009/10/06(火) 16:11:18 ]
- きえろぶっとばされんうちにな、中国さん。
- 253 名前:デフォルトの名無しさん [2009/10/06(火) 16:21:38 ]
- きえろぶっとばされんうちにな、中国のお水さん。
- 254 名前:デフォルトの名無しさん [2009/10/06(火) 16:23:14 ]
- もうだめだこのカレ。ほーっ、ほーっ、ホテルに来い。
- 255 名前:デフォルトの名無しさん [2009/10/06(火) 16:33:25 ]
- こっちのお水は、中国さん。あそこの水も、中国さん。
ほ、ほ、ホテル来い。
- 256 名前:デフォルトの名無しさん [2009/10/06(火) 16:40:53 ]
- CellSheet ver. 0.2
www1.axfc.net/uploader/Sc/so/42998.zip SHIFTキーで選択ができるようになった。
- 257 名前:デフォルトの名無しさん [2009/10/06(火) 16:45:05 ]
- >>256
ウィルス注意
- 258 名前:デフォルトの名無しさん [2009/10/06(火) 16:54:07 ]
- >>257
ウイルスじゃねーぞ。
- 259 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 16:56:16 ]
- コワイから捨てた
- 260 名前:デフォルトの名無しさん [2009/10/06(火) 16:59:18 ]
- ソース嫁
- 261 名前:デフォルトの名無しさん [2009/10/06(火) 17:03:17 ]
- 解凍したら自動実行するタイプの書庫です。
HDあぼ〜んしたければどうぞ。
- 262 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 17:05:02 ]
- 書庫(笑)
- 263 名前:デフォルトの名無しさん [2009/10/06(火) 17:09:29 ]
- ウイルスばらまくなよ。
- 264 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 17:51:14 ]
- webでサンプルプログラムを見ながら自分でウィンドウを表示するプログラムを作成(写し)しました。
次にメニューを付けようとしたのですが表示されません。 RegisterClassへ引数として渡す構造体にMAKEINTRESOURCE(省略)を追加するだけで リソースエディッターで作成したメニューが表示出来る!は間違っていますか?
- 265 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 17:57:13 ]
- 付け方はいくつかあるけど、それでもつくはず
- 266 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:02:33 ]
- サンクス
リソースファイル削除して作り直したらつきました(??) 原因は不明ですが目的は達成できました。
- 267 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:04:14 ]
- リソースファイルは時々ぶっ壊れる物です
- 268 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:35:39 ]
- 自分のプロセスハンドルを取得しようとしたところ、
OpenProcess()でNULLが返ってきました。 エラー番号は”5”でアクセス拒否なのですが、理由がわかりません。 教えていただけないでしょうか。 OpenProcess()のアクセス方法は、PROCESS_ALL_ACCESSである必要があります。 DWORD dwId = GetCurrentProcessId(); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwId); DWORD dwErrNo = GetLastError();
- 269 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 19:43:12 ]
- 他プロセスに継承しないならGetCurrentProcessで十分だろ、って判断された?
- 270 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:20:05 ]
- 逆にその必要があるなら、GetCurrentProcessをDuplicateHandleすればいいはず。
複製先もGetCurrentProcessにすれば自プロセスで使える本物のハンドルが手に入ると Advanced Windowsに確か書いてあった。
- 271 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:25:54 ]
- GetCurrentProcessじゃなくてINVALID_HANDLE_VALUEを使っとけ
- 272 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:04:58 ]
- ScrollWindowEx で SW_SMOOTHSCROLL を使うとスムーズスクロールできるようですが、
このフラグを使うと ScrollWindowEx は ERROR を返して、スクロールされなくなってしまいます。 GetLastError で調べると 0 を返すので、原因が分かりません… SW_SMOOTHSCROLL さえ指定しなければ、問題なくスクロールされます。 引数 flags の HIWORD 部でスムーズスクロールする回数を指定するようですが、 ScrollWindowEx(hWnd, 0, dy, NULL, NULL, NULL, NULL, MAKELONG(SW_SMOOTHSCROLL, 5)); という感じではダメなのでしょうか。
- 273 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:22:46 ]
- つーかSmoothScrollWindowを使え
- 274 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:54:58 ]
- >>271
4バイトしかないような関数だものな。 OR EAX, -1 RET だけ。
- 275 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:10:34 ]
- つーかINVALID_HANDLE_VALUEと同じ値ってのも随分と間抜けな設計だなあ
|

|