トップページ⇒tech
1001コメント256KB

Win32API質問箱 Build116

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/30(水) 17:17:04.92
Win32APIについての質問はこちらへどうぞ。

■過去スレ
Win32API質問箱 Build115
http://toro.2ch.net/test/read.cgi/tech/1373671389/

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0421デフォルトの名無しさん2013/12/25(水) 16:10:35.11
もう学校休みですしおすし
0422デフォルトの名無しさん2013/12/25(水) 18:01:03.15
どこからアンチhogeの話が出てきたんだか
0423デフォルトの名無しさん2013/12/25(水) 20:36:07.68
つか、Win32APIっていつまで使えるの?
XPのサポート終了時まで?
0424デフォルトの名無しさん2013/12/25(水) 22:24:30.28
どっちにしても先が見えないものを使うな馬鹿
0425デフォルトの名無しさん2013/12/25(水) 23:20:47.77
longhornで廃止つってたのがpgrでね
0426デフォルトの名無しさん2013/12/26(木) 14:20:15.27
しめじもやってたらしいな
http://k-tai.impress.co.jp/docs/news/20131226_629189.html
0427デフォルトの名無しさん2013/12/26(木) 15:48:17.51
やっぱ有象無象のデベロッパが出したネット権限つきのIMEとか使うべきじゃねーな
0428デフォルトの名無しさん2013/12/26(木) 18:53:57.02
Simejiはバグだと言いはってるw
バグでしたゴメソでOKww
0429デフォルトの名無しさん2013/12/27(金) 02:24:51.92
バグで通信するかよボケだわな
0430デフォルトの名無しさん2013/12/27(金) 17:04:49.31
現在ログインしているユーザーのドキュメント(マイドキュメント)フォルダの
ディレクトリを取得する方法ってSHGetFolderPath以外にもどんな方法があるの?
0431デフォルトの名無しさん2013/12/27(金) 17:41:48.06
環境変数で取れるかも知れないし
本来の場所以外に書き換えられてるかもしれない
0432デフォルトの名無しさん2013/12/27(金) 18:15:11.24
>>430
Environment.SpecialFolder列挙体は?
0433デフォルトの名無しさん2013/12/27(金) 19:34:25.40
SHGetFolderLocation
0434デフォルトの名無しさん2013/12/27(金) 22:12:55.09
環境変数
0435デフォルトの名無しさん2013/12/30(月) 11:25:04.47
win7のアプリケーションごとの音量を操作したいんだけど
どのapi使えばいい?
0436デフォルトの名無しさん2013/12/30(月) 21:40:24.80
ロールバックしてる
0437デフォルトの名無しさん2013/12/30(月) 23:57:53.58
標準出力がコンソールの場合とリダイレクトされている場合とで動作を変えたいのですが、
標準出力がリダイレクトされているか判別する方法はありますか?
0438デフォルトの名無しさん2013/12/31(火) 00:47:31.68
リダイレクトを判別する方法なんてない。
0439デフォルトの名無しさん2013/12/31(火) 00:53:44.84
>>439
あれ、ないんですか?
例えばmoreコマンドは出力先がコンソールの場合は
画面サイズで出力を一時停止しますけど、
リダイレクトされてる場合は一時停止しません。
なので判別方法が何かあるかと思うのですが・・・。
0440デフォルトの名無しさん2013/12/31(火) 01:06:42.07
コンソールの機能ってことはないの?
0441デフォルトの名無しさん2013/12/31(火) 01:18:11.16
http://scripting.cocolog-nifty.com/blog/2010/01/post-a032.html
0442デフォルトの名無しさん2013/12/31(火) 05:57:34.55
>>436
しばらく気付かんかった・・・

>>437>>439
GetStdHandleして得られたハンドルに対して、GetFileTypeやGetConsoleModeでチェック掛ける。
>>441みたくコンソール専用機能を呼んでエラーを見ても良い
0443デフォルトの名無しさん2013/12/31(火) 21:56:38.82
>>439
isatty
0444デフォルトの名無しさん2014/01/03(金) 22:59:04.18
マルチディスプレイないのでテストができない! 助けて!
0445デフォルトの名無しさん2014/01/03(金) 23:20:32.25
ディスプレイを送ればいいんですか?
0446デフォルトの名無しさん2014/01/03(金) 23:42:20.48
偽ディスプレイドライバ作って下さい。
0447デフォルトの名無しさん2014/01/03(金) 23:56:59.88
偽ドライバですか。
0448デフォルトの名無しさん2014/01/04(土) 00:20:23.42
はい、お願いします。
0449デフォルトの名無しさん2014/01/04(土) 00:49:34.64
Windowsでドライバーを書くのはメーカーの人なんで、このスレでお願いしても
無理じゃないですかね?
というか、かなりハード寄りなので板自体難しいかも。
むしろこの際、Linux板でお願いしたほうが良いかもしれないです。
Linuxユーザーは日頃からドライバを書きなれてると聞きました。
0450デフォルトの名無しさん2014/01/04(土) 00:52:45.39
デバドラのプログラム書いてる人はlinuxユーザーでも少数でしょ
0451デフォルトの名無しさん2014/01/04(土) 00:58:22.14
ネットワーク管理者、アプリケーションプログラマ、ウェブプロデューサ、
業務アプリ開発者、カーネル開発者、ハードウェア開発者、経営者などを
一人で兼務している人もたくさんいますよ。
中にはドライバを書けない人もいるとは思いますけど、そっちのほうが
少数派ですよ。
0452デフォルトの名無しさん2014/01/04(土) 01:22:56.56
>>447
偽って言うか、仮想ディスプレイドライバじゃねーの?
そもそもノーパソの一つでもあればマルチディスプレイなんて楽にテストできる気がするが。
0453デフォルトの名無しさん2014/01/04(土) 16:05:46.41
SDKならともかく、デバドラっつーたらDDKの範疇でしょ
流石に分からんなあ…
0454デフォルトの名無しさん2014/01/04(土) 16:29:16.59
Win7/8.xあたりで音の左右をシステム的に入れ替える事って出来ないですかね?
TabletPCを180度回すと画面は回転しますが音の左右はそのままなので左右を
入れ替えたいです
0455デフォルトの名無しさん2014/01/04(土) 17:08:13.38
スレチ
ドトネ池
0456デフォルトの名無しさん2014/01/04(土) 17:16:56.74
DDK書いてるけど署名が面倒臭い
金かかるからfreeはやだ
0457デフォルトの名無しさん2014/01/04(土) 19:42:49.80
フリーで署名つきドライバ配布してる奴は寄付で賄ってんのかな
0458デフォルトの名無しさん2014/01/04(土) 20:01:47.68
セマフォの使い方について教えてください。

セマフォを使えば、共有資源にアクセスできる数を制限できるらしい
のですが、2以上にする理由がわかりません。

ある資源に同時にアクセスするスレッドが複数ある場合に排他処理を
して保護するのが目的だと思いますが・・・

2以上にするのであれば、排他処理しなくていいのでは?
と思ってしまいます。
0459デフォルトの名無しさん2014/01/04(土) 20:07:01.81
>>458
ドコモなり、AUなり、SBMのサポートに聞け
0460デフォルトの名無しさん2014/01/04(土) 20:16:55.19
>>458
プロセスを跨いで、有限のリソースにアクセス出来るのが
セマフォ。
プロセス内で1つのリソースを排他するならクリティカルセクション使えよ
0461デフォルトの名無しさん2014/01/04(土) 20:21:06.33
例えばDBサーバに接続したいけど同時にたくさん接続するとDBサーバに負荷がかかるから10接続までに制限したいとか、そういうのでどう
0462182014/01/04(土) 20:23:09.13
>>458
リソースが二個あるとかだろ。
0463デフォルトの名無しさん2014/01/04(土) 20:36:27.90
>>462
リソースが2個ならクリティカルセクションを2個用意し、スピンロックを設定したほうが
カーネルモードへの移行がなくてコスト的に安いのですが。
0464デフォルトの名無しさん2014/01/04(土) 20:40:53.75
どうぞご自由に
0465デフォルトの名無しさん2014/01/04(土) 20:44:44.08
ここで聞いても仕方ないよw
0466182014/01/04(土) 20:58:51.58
>>463
どっちのクリティカルセクションで待つの?
あと、リソースが 100個あったらどうする気?
0467デフォルトの名無しさん2014/01/04(土) 21:03:15.50
2こで2なら
100なら100だろ

大丈夫か?
0468デフォルトの名無しさん2014/01/04(土) 21:05:49.47
Wikipediaのセマフォを読んでわからなかったら、また質問にきなさい
0469182014/01/04(土) 21:11:12.16
>>467
前半読んでから出直せよ...
0470デフォルトの名無しさん2014/01/04(土) 22:41:48.25
他には誰も解答できていない件
0471デフォルトの名無しさん2014/01/04(土) 23:52:01.21
ミューテックスは資源にアクセスできるのがある時点で1スレッド。
セマフォは複数同時にアクセスを許し、許す数を指定する。
セマフォで1時点で1スレッドの制限ならミューテックスを使えって話。
複数のスレッドから同時にアクセスを許す資源ならセマフォを使う。
0472デフォルトの名無しさん2014/01/05(日) 00:26:53.78
>>458
自由に同格に使えるプリンタが2台あるような場合に使うんだよ
セマフォを獲得出来たということは、プリンタが使える
逆に、セマフォが獲得出来なければ、空いているプリンタは無いので待機する
0473デフォルトの名無しさん2014/01/08(水) 12:28:06.86
そんな機能WinAPIにあったの?
0474デフォルトの名無しさん2014/01/08(水) 16:22:03.87
運営が削除するだろ
削除しなければスレ違いOKという運営のメッセージ
0475デフォルトの名無しさん2014/01/08(水) 16:29:08.02
消されると増えるログ
0476デフォルトの名無しさん2014/01/08(水) 17:17:14.09
かかってこいよ
0477デフォルトの名無しさん2014/01/08(水) 19:37:35.42
vb.netからWIN32APIを呼ぶときの質問いいですか?

とあるデバイスドライバを使ってBIOSと通信する
プログラムを書いているんですが、
殆どの環境でdeviceioControlが失敗します。

例外をキャッチすると
「PInvoke 関数がスタックを不安定にしています」
と出るんですが、どこが間違えてるのかわからず・・・。
deviceioControlの正しい宣言を教えていただけませんか?

ちなみに環境はVB.net2010で、OSはwindows8,8.1Proです
0478デフォルトの名無しさん2014/01/08(水) 19:45:28.56
スタックが狂うなら引数の数か呼び出し規約を間違えているに決まっているだろ
0479デフォルトの名無しさん2014/01/08(水) 20:02:20.57
甘えているといわれるかもしれないけど、
宣言の方法を教えていただけませんかね。

引数の数はあってるはず。多分宣言時の型が間違っているのだろうけど

http://www.pinvoke.net/default.aspx/kernel32.deviceiocontrol

上のサイトのvb signatureを引用して
marshal.allocglobalでポインタに必要な配列分のメモリを割り当てて
実行して結果をとるというもの。

64bit win8.1では動くこともあった。
32bit win8では動かず。
0480デフォルトの名無しさん2014/01/08(水) 20:11:02.98
>>479
> 引数の数はあってるはず
先入観を捨てろ
1から見直せ
0481デフォルトの名無しさん2014/01/08(水) 20:16:34.25
んなあほな。合ってるがな。
つーか動作した環境もあると言ってるしょ。

deviceiocontrolは
・ハンドル
・命令番号
・入力データの先頭ポインタ
・入力データの長さ
・出力データの格納先ポインタ
・出力データバッファの長さ
・出力データ数の格納先変数のポインタ
・動作パラメータ

で一定でしょ。
ポインタはintptr,長さはuintegerで宣言してるけど
それが悪いのか、それとも別の理由なのか
わからない教えて!
0482デフォルトの名無しさん2014/01/08(水) 20:20:37.60
これは合っているのだろうか。
dllinportとdeclareで動作が変わることなどあるのだろうか

Public Declare Function DeviceIoControl_IOCTL_GET_DISK_LENGTH_INFO Lib "kernel32" Alias "DeviceIoControl" ( _
ByVal hDevice As System.Int32, _
ByVal dwIoControlCode As System.Int32, _
ByRef lpInBuffer As System.Int32, _
ByVal nInBufferSize As System.Int32, _
ByRef lpOutBuffer As GET_LENGTH_INFORMATION, _
ByVal nOutBufferSize As System.Int32, _
ByRef lpBytesReturned As System.Int32, _
ByRef lpOverlapped As OVERLAPPED) As System.Boolean

<StructLayout(LayoutKind.Sequential)> _
Public Structure OVERLAPPED
Public Internal As System.Int32
Public InternalHigh As System.Int32
Public offset As System.Int32
Public OffsetHigh As System.Int32
Public hEvent As System.Int32
End Structure
0483デフォルトの名無しさん2014/01/08(水) 20:26:52.27
整数の長さを見直しなさい
32/64で違う場合の鉄則だ
0484デフォルトの名無しさん2014/01/08(水) 20:48:05.49
>>481
引数だけに限らず「先入観」を捨てるのよ
0485デフォルトの名無しさん2014/01/08(水) 21:24:30.14
抽象的なこといわず、答えを教えてくださいよ。
0486デフォルトの名無しさん2014/01/08(水) 21:32:52.69
そのサイトから引用したという宣言を「コピペ」しろ
0487デフォルトの名無しさん2014/01/08(水) 22:22:24.37
こんな感じです。
inbuffer,outbufferにはmarshal.allsocGlobal()でメモリを割り当ててます

<DllImport("Kernel32.dll", SetLastError := False, CharSet := CharSet.Auto)>
Public Shared Function DeviceIoControl( _
ByVal hDevice As Microsoft.Win32.SafeHandles.SafeFileHandle, _
ByVal IoControlCode As EIOControlCode, _
ByVal InBuffer As IntPtr, _
ByVal nInBufferSize As UInteger,
ByVal OutBuffer As IntPtr,
ByVal nOutBufferSize As UInteger, _
ByRef pBytesReturned As UInteger,
ByRef Overlapped As System.Threading.NativeOverlapped) As Boolean
End Function
0488デフォルトの名無しさん2014/01/08(水) 22:40:38.12
> ByRef pBytesReturned As UInteger,
0489デフォルトの名無しさん2014/01/08(水) 22:59:21.14
この通りに宣言されてるなら問題ない 別の理由
0490デフォルトの名無しさん2014/01/08(水) 23:20:27.86
>>488 間違えてますか?
>>489 手がかりを調べるツールはないでしょうか?
 例外の原因が絞り込めれば非常に助かるのですが。
0491デフォルトの名無しさん2014/01/09(木) 00:40:03.71
>>488 わかりました多分。
アンマネージな関数にむかって
byrefでメモリアドレス渡したら駄目ですね。

intptrにして、DWORDなので4バイトメモリ確保してみます。
64ビットも意識してmarshal.sizeof(integer)のほうがいいでしょうか。

最期のoverlap構造体もintptrにしてintptr.zeroを
値として渡したほうがいいでしょうか。

明日検証の本体で確かめてみます。
0492デフォルトの名無しさん2014/01/09(木) 21:47:41.46
ポインタ型はすべてアンマネージでメモリを確保したら
問題なく動作したよ。

ただ、deviceiocontrolがクソ遅い。これはどうしたら。
0493デフォルトの名無しさん2014/01/12(日) 00:15:46.21
ボインボインが使えれば
舐められれば
吸えれば
神言語
0494デフォルトの名無しさん2014/01/12(日) 01:25:53.09
これがVBか
0495デフォルトの名無しさん2014/01/14(火) 19:39:58.44
>>495 使えるけどVCと違ってガベージコレクタを意識しなきゃいけないんだよ

Dim gch As GCHandle = GCHandle.Alloc(obj, GCHandleType.Pinned)
Dim address As intptr = gch.AddrOfPinnedObject()

hoge(intptr)

gch.Free()

みたいにする。
VC++は確かに高速だけど
直に触りすぎるから好きではないな。
0496あぼーんNGNG
あぼーん
0497あぼーんNGNG
あぼーん
0498あぼーんNGNG
あぼーん
0499デフォルトの名無しさん2014/01/17(金) 12:14:06.56
http://wired.jp/2014/01/16/death-pc-also-mean-end-web/

ブラウザ死亡確定
開発効率の向上とインストールの簡易さ向上により
もはやWebアプリの利点は失われた。
0500デフォルトの名無しさん2014/01/17(金) 15:33:27.00
>>499
FLASHが出てきたときもJSの利点はなくなったとか言ってる奴いたなぁ。
あいつ今頃どこで何をしてるんだろう。
0501デフォルトの名無しさん2014/01/17(金) 16:38:48.65
>>499
何を言ってるんだ?
ウェブアプリの利点がゼロになったと仮定しても、
ブラウザはウェブブラウジングを行うものとして残り続けるよ
0502片山博文MZコスモ ◆T6xkBnTXz7B0 2014/01/17(金) 17:51:59.07
ウィンドウズってブラウザからワンクリックインストールできないの?
0503デフォルトの名無しさん2014/01/17(金) 17:57:52.74
ブラウザからexe起動できるようにさせとけば出来るよ
ActivXでそういうページ作れば
0504デフォルトの名無しさん2014/01/17(金) 18:08:08.71
ブラウザから特定のアプリがインストール済みとかバージョンとか確認できればいいのに。マイクロソフトさん、お願いします。
0505デフォルトの名無しさん2014/01/17(金) 18:22:24.43
できますよ
0506デフォルトの名無しさん2014/01/17(金) 19:38:03.08
JSとFlashは実質的に同じころ出てきたんだよね。
0507デフォルトの名無しさん2014/01/17(金) 20:36:26.24
>>504
ActiveXでいいじゃん
0508デフォルトの名無しさん2014/01/17(金) 23:34:35.49
エクスプローラからファイルを右クリックすると
JPGやGIFだと、ポップアップメニューから「プレビュー」で表示できますが
あのウインドウを出すAPIはありますでしょうか
拡張子の関連で開くShellExecuteでなく、あのプレビューウインドウを出せたらいいなと
0509デフォルトの名無しさん2014/01/18(土) 10:25:42.16
>>508
それって「Windows 画像とFAXビューア」がインストールされていて、エクス
プローラのコンテキストメニューを拡張している前提では?
0510デフォルトの名無しさん2014/01/18(土) 11:38:51.32
ストアアプリだと、オブジェクト形式のWindows APIなんだね。
関数形式のWin32API脂肪?_?
0511デフォルトの名無しさん2014/01/18(土) 12:31:21.67
>>509
確かにタイトルは「Windows 画像とFAXビューア」でした
Windows標準機能かと思っていました
が、取り敢えず正体はShimgvw.dllで、これをRundll32.exeから呼ぶのだそうです
APIでなく、
Rundll32.exe Shimgvw.dll,ImageView_Fullscreen C:\0018.bmp
をそのまま実行すればアニメGifでもTiffでも表示できますね
0512デフォルトの名無しさん2014/01/18(土) 14:56:51.57
>APIでなく
スレタイすら読めないほど頭悪いのか?
それともクズ親に育てられたからわざとスレチで荒らしてんの?
お前生きてるだけで迷惑だよ。
0513デフォルトの名無しさん2014/01/18(土) 15:36:04.58
MacKain not obeying
0514デフォルトの名無しさん2014/01/18(土) 18:00:06.54
>>512
そこでお前がAPIはこれだと示せばいいだけだ
お前こそが邪魔なんだよ
0515デフォルトの名無しさん2014/01/18(土) 18:02:19.95
他スレ荒らしてるアンチhogeと罵り方がそっくり
同一の社会不適合者だろう
0516デフォルトの名無しさん2014/01/18(土) 19:44:32.44
>>515
アンチhogeとapiスレ基地は同一の奴らだろ
0517デフォルトの名無しさん2014/01/18(土) 20:46:00.92
>>511
Shimgvw.dll内のImageView_Fullscreenを呼べば立派なWin32APIじゃね?
0518デフォルトの名無しさん2014/01/18(土) 21:32:10.91
お前らが今やってるのは
ネトウヨ vs 在日のフリしたネトウヨ

にしてもこれは何だ

http://webcache.googleusercontent.com/search?q=cache:0hOmvGZxuMwJ:toro.2ch.net/test/read.cgi/tech/1383121024/+&;cd=1&hl=ja&ct=clnk&gl=jp

>>495付近のログがおかしい
Googleキャッシュと別物になってる

書き込み内容もたいして問題ないし
書き込み方が異常だったとかで削除したのか?
0519デフォルトの名無しさん2014/01/18(土) 21:38:48.72
>>518
最近は運営が私情で好き勝手に削除するようになったんだよ。
おかげで「2chのWin32APIスレはどうせ削除されるからどんな内容でも書き放題」って話をたまにきくようになった。
0520デフォルトの名無しさん2014/01/18(土) 22:56:26.58
実際、プログラムなんて書いてる暇なんてあったら
神に祈りでもしてたほうが物事もシンプルになるし
こんなことを仕事とかでやらされる人達って苦行でしかないよ
■ このスレッドは過去ログ倉庫に格納されています