問題タブ [shell32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1357 参照

ms-office - インターネット ショートカット IDList 値のデコード

MS-Office for SharePoint Libraries から生成された URL ショートカットに格納されている値に関する情報を見つけようとしています。Office 2007 から Office 365 に移行しており、これらのリンクを作成する 2007 の機能は Office 365 では利用できないようです。

名前を付けて保存ダイアログでクリックしたときに .url ファイルに IDList 値がない場合、ファイル名がショートカットに変更されます。.url を .lnk に変更しようとしましたが、オフィス以外のアプリケーションでは処理できません。

.url ファイルの内容

同じユーザーが再生成したファイル

別のユーザーのファイルからの値

この値をデコードする方法を理解できなかったか、どのデータが格納されているかを理解できましたか。WindowsスクリプトとPowershellおよびC#ラッパーのシェル32を使用してプログラムでショートカットを作成するさまざまな方法を読み、C++で情報を探しました。私が持っている唯一の希望は、シェル リンクにも pidl のアイテム ID リストがあることですが、これが関連しているかどうかは確認できません。

私が知っているのは、IDList を別の .url に移動すると、元のパスに移動できるということです。IDList には、それらを作成したユーザーや、url ファイルがいつ再作成されるかによって変更されるセクションがいくつかあります。

インターネット ショートカット https://msdn.microsoft.com/en-us/library/bb776784(v=vs.85).aspx

シェル リンク https://msdn.microsoft.com/en-us/library/dd891312.aspx

0 投票する
1 に答える
156 参照

dll - Windows PE ファイルのアドレス エクスポート テーブルに null エントリがあるのはなぜですか?

Windows PE ファイルを検査するプロジェクトを作成しました。User32 や Shell32 などの特定のファイルを処理しているときに、エクスポート アドレス テーブルに 0 のエントリがあることに気付きました。エクスポート アドレス テーブルにヌル (0) エントリを持つ目的は何ですか? (0 のエントリは有効な仮想アドレスに解決されません)

参考までに - NikPEViewer や Dll Export Viewer などのアプリケーションを使用すると、これらのエントリはまったく表示されません。DumpBin は、エクスポート名テーブルと序数テーブルに含まれていないエクスポートを表示しますが、null エントリはスキップします。

0 投票する
1 に答える
1073 参照

c++ - defファイルなしで序数をエクスポート

def ファイルを使用して序数をエクスポートできますが、システム dll は def ファイルを使用しません。それでも、shell32.dll には 569 個の序数エクスポートがあり、user32.dll には 181 個の序数エクスポートがあります。

defファイルなしで序数をエクスポートする方法はありますか?

0 投票する
1 に答える
347 参照

c - SHGetPathFromIDList 関数が 3 回エクスポートされる理由

shell32.dll は、ANSI と UNICODE の 2 種類の関数をエクスポートすることを知っています。(わかりやすくするために、CHAR*/WCHAR* 引数を取る関数についてのみ説明します。)

たとえば、ShellMessageBoxAは ANSI バージョンで、ShellMessageBoxWは Unicode バージョンです。ShellMessageBoxヘッダー ファイルで定義されているマクロです。

したがってShellMessageBox、Shell32.dll からエクスポートされる関数としては存在しません。

しかし今、私はそれSHGetPathFromIDListが3回エクスポートされていることを発見しました:

  • オーディナル 312 -SHGetPathFromIDList
  • オーディナル 313 -SHGetPathFromIDListA
  • オーディナル 314 -SHGetPathFromIDListW

これの目的は何ですか?

0 投票する
2 に答える
1103 参照

vba - How To Compress Folder-Contents in 1 Statement on Windows?

I'm attempting to zip a folder containing subfolders and items, using Windows shell CopyHere command:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows/desktop/ms723207(v=vs.85).aspx

Update: Note, prefer a native solution-- this is for a distributed Excel VBA tool, so bundling 3rd-party files is not ideal. And, need synchronous compression.

I can easily add a folder and its contents to the zip:

So we know CopyHere can process multiple objects inside a folder in 1 statement.

The problem is, the above command puts the containing-folder at the root of the zip, and it's contents inside of it. But, i don't want the containing folder-- just its contents.

The doc mentions a wildcard (option 128), but when i use a wildcard, i get an error:

The file name you specified is not valid or too long.

Perhaps there's a way to use my 1st command above, and then move the items in the zip to the root of the zip?

It would be acceptable to loop through each item in the source folder, adding one at a time to the zip. But, because CopyHere is asynchronous, each subsequent CopyHere fails if the previous CopyHere is not finished. None of the fixes work for this issue:

  • Comparing number of items in source-folder and destination-zip fail, because if the zip contains a folder, that counts as only 1 item (the items it contains are not counted. https://stackoverflow.com/a/16603850/209942

  • Waiting a while between each item works, but a timer is unacceptable: it's arbitrary. I cannot guess in advance the size or compress-time of each object.

  • Checking to see if the zip is locked for access failed for me. If I block my loop until the file is not locked, I still get a file-access error. https://stackoverflow.com/a/6666663/209942


Update: VBA can call shell commands synchronously (instead of creating a shell32.shell object in VBA), so if CopyHere works on command-line or PowerShell, that could be the solution. Investigating...

0 投票する
0 に答える
1027 参照

vb.net - InvokeVerbEx("Print") を使用して、VB.net でプリンター ダイアログなしでファイルをプリンターに送信する

プリンター ダイアログを使用せずに、いくつかの種類のファイルをプリンターに送信したいと考えています。

動作する vbs スクリプトを見つけて、それを vb.net に変換します。

このエラー メッセージは間違っています。

この行で; MyFile = MyFolder.ParseName(MyPj.FileName)

MyPj.Filename には、フォルダー内のファイルの名前 (MyPj.Path) が含まれます。

この例も試しました。https://msdn.microsoft.com/en-us/library/windows/desktop/bb774057%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396成功なし。

これを使用してファイルをプリンターに送信する前に、これは「オーキー」ボタンのあるダイアログを表示します。

0 投票する
1 に答える
452 参照

.net - shell32 copyhereが.Netでもpowershellスクリプトでも機能しない

プログラムで MTP を介して PC と Android の間でファイルをコピーするための PowerShell スクリプトがあります

このスクリプトは、powershell コンソールで実行すると正常に動作しますが、cmd のように実行すると

powershell -Files mtpcp.ps1 c:\test\Android\test\

また

powershell ./mtpcp.ps1 c:\test\Android\test\

何もしません(エラーは表示されません)。

次に、system.Shell32を使用して.Netに同じ関数を実装しました.CopyHere関数は通常のパスのように正常に動作しますが、powershellのようc:\にmtpデバイスパスでは動作しません.CopyHere関数では何もしません.エラーメッセージもありません.現れた。