если в QT сделать код (еще в .pro приписать LIBS += -lnetapi32):
| Код | #include "mainwindow.h" #include "ui_mainwindow.h"
#include <windows.h> #include <winnetwk.h> #include <lmshare.h> #include <lmapibuf.h>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); }
MainWindow::~MainWindow() { delete ui; }
QString wchar2qs(wchar_t* ws) { if (ws == NULL) return QString(); return QString::fromWCharArray(ws, wcslen(ws)); }
void MainWindow::on_pushButton_clicked() { LPWSTR server = NULL; PSHARE_INFO_1 sh; DWORD resume;
for (;;) { DWORD cnt, total_cnt;
NET_API_STATUS res = NetShareEnum(server, 1, (LPBYTE*)&sh, MAX_PREFERRED_LENGTH, &cnt, &total_cnt, &resume);
if (res == ERROR_SUCCESS || res == ERROR_MORE_DATA) { for (int i = 0; i < cnt; i++) { ui->listWidget->addItem(wchar2qs(sh[i].shi1_netname)); } }
NetApiBufferFree(sh);
if (res != ERROR_MORE_DATA) break; } }
|
и он не работатет. А для консольной програмки работает:
| Код | #include <stdio.h> #include <windows.h> #include <lmshare.h> #include <lmapibuf.h>
int main() { LPWSTR server = NULL;
PSHARE_INFO_1 sh; DWORD resume;
for (;;) { DWORD cnt, total_cnt;
NET_API_STATUS res = NetShareEnum(server, 1, (LPBYTE*)&sh, MAX_PREFERRED_LENGTH, &cnt, &total_cnt, &resume);
if (res == ERROR_SUCCESS || res == ERROR_MORE_DATA) { for (int i = 0; i < cnt; i++) {
printf("%S %i\n", sh[i].shi1_netname, res); } }
NetApiBufferFree(sh);
if (res != ERROR_MORE_DATA) break; } }
|
|